//引入express模块
const express = require('express');
//引入连接池模块
const pool = require('../pool.js');
//创建路由器对象
const r = express.Router();
//第三方图形验证码模块
const svgCaptcha = require('svg-captcha');
let a = '';
//所有图形验证码，服务器node一个程序生出一张图
r.get('/code', (req, res) => {
  //算术计算
  const cap = svgCaptcha.createMathExpr({
    fontSize: 45,
    mathMin: 1,
    mathMax: 9,
    mathOperator: "+-",
    width: 110,
    height: 45,
    color: true,
  });
  a = cap.text;
  console.log(a);
  // req.session.captcha = cap.text;//session 存储验证码数值
  // console.log(req.session.captcha);
  res.type('svg');//响应的类型
  res.send(cap.data);
})
//1.用户注册(post  /)
r.post('/', (req, res, next) => {
  // //获取用户输入的验证码
  // var code=req.body.code;
  // //与系统验证  和用户输入的验证码比较
  // if(code !=req.session.captcha){
  //   res.send({code:202,msg:'验证码错误'});  //不一样返回202验证码输入错误
  //   return;
  // }
  //1.1获取post请求的数据
  let obj = req.body;
  console.log(obj);
  //1.2验证各项数据是否为空
  if (!obj.uname) {
    res.send({ code: 401, msg: 'uname不能为空' });
    //跳出函数
    return;
  }
  if (!obj.upwd) {
    res.send({ code: 402, msg: 'upwd不能为空' });
    return;
  }
  // if(!obj.email){
  //   res.send({code:403,msg:'email不能为空'});
  // return;
  // }
  if (!obj.phone) {
    res.send({ code: 404, msg: 'phone不能为空' });
    return;
  }
  //验证手机号格式
  // if(!(/^1[3-9]\d{9}$/.test(obj.phone))){
  //   res.send({code:301,msg:'手机号码格式错误'});
  // return;
  // }
  //1.3执行sql命令
  pool.query('insert into tm_user (uid,uname,upwd,avatar,phone) values(null,?,?,?,?)', [obj.uname, obj.upwd, obj.avatar, obj


    .phone], (err, result) => {
      console.log(err);
      if (err) {
        //如果出现错误交给下一个中间件
        next(err);
        return;
      }
      res.send({ code: 200, msg: '注册成功' });
    });
});
//2.用户登录
r.post('/login', (req, res, next) => {
  //2.0验证验证码
  //获取用户输入的验证码
  var code = req.body.code;
  // console.log(code);
  // console.log(req.session.captcha)
  // console.log(code==req.session.captcha);
  // //与系统验证  和用户输入的验证码比较
  if (code != a) {
    res.send({ code: 202, msg: '验证码错误', data: code });  //不一样返回202验证码输入错误
    return;
  }
  //2.1获取post传递的数据
  let obj = req.body;
  //2.2验证各项数据不能为空
  if (!obj.uname) {
    res.send({ code: 401, msg: 'uname不能为空' });
    return;
  }
  if (!obj.upwd) {
    res.send({ code: 402, msg: 'upwd不能为空' });
    return;
  }
  //2.3执行SQL命令
  pool.query('select * from tm_user where uname=?&&upwd=?', [obj.uname, obj.upwd], (err, result) => {
    console.log(result);
    if (err) {
      next(err);
      return;
    }
    if (result.length === 0) {
      // req.session.auth=false;
      res.send({ code: 201, msg: '登录失败' });
    } else {
      // req.session.auth=true;
      res.send({ code: 200, msg: '登录成功', uid: result[0].uid, uname: result[0].uname, avatar: result[0].avatar, phone: result[0].phone, vip: result[0].isvip });
    }
  })
});
//3.修改用户
r.put('/', (req, res, next) => {
  // if(!req.session.auth){
  //   res.send({code:0,msg:'未登录'});
  //   return;
  // }
  //3.1获取传递的数据
  let obj = req.body;
  console.log(obj);
  //3.6执行SQL命令
  pool.query('update tm_user set ?where uid=?', [obj, obj.uid], (err, result) => {
    if (err) {
      next(err);
      return;
    }
    if (result.affectedRows === 0) {
      res.send({ code: 201, msg: '修改失败' });
    } else {
      res.send({ code: 200, msg: '修改成功' });
    }
  })
});
//4.检测用户名是否可用
r.get('/checkuname/:uname', (req, res, next) => {
  //4.1获取路由传参的数据
  let obj = req.params;
  //4.2执行SQL命令
  pool.query('select * from tm_user where uname=?', [obj.uname], (err, result) => {
    if (err) {
      next(err);
      return;
    }
    if (result.length !== 0) {
      res.send({ code: 201, msg: '该用户名已被注册' });
    } else {
      res.send({ code: 200, msg: '该用户名可以使用' });
    }
  });
});

//4.检测手机号是否可用
r.get('/checkphone/:phone', (req, res, next) => {
  //4.1获取路由传参的数据
  let obj = req.params;
  //4.2执行SQL命令
  pool.query('select * from tm_user where phone=?', [obj.phone], (err, result) => {
    if (err) {
      next(err);
      return;
    }
    if (result.length !== 0) {
      res.send({ code: 201, msg: '该手机号已被注册' });
    } else {
      res.send({ code: 200, msg: '该手机号可以使用', data: result });
    }
  });
});
//5.删除用户
r.delete('/:uid', (req, res, next) => {
  // if(!req.session.auth){
  //   res.send({code:0,msg:'未登录'});
  //   return;
  // }
  //5.1获取路由传参的数据
  let obj = req.params;
  //5.2执行SQL命令
  pool.query('delete from tm_user where uid=?', [obj.uid], (err, result) => {
    console.log(err);
    if (err) {
      next(err);
      return;
    }
    if (result.affectedRows === 0) {
      res.send({ code: 201, msg: '删除失败' });
    } else {
      res.send({ code: 200, msg: '删除成功' });
    }
  });
})
//6.用户列表
r.get('/', (req, res, next) => {
  // if(!req.session.auth){
  //   res.send({code:0,msg:'未登录'});
  //   return;
  // }
  //6.1获取查询字符串的数据
  let obj = req.query;
  //6.2判断是否为空，如果为空设置默认值
  if (!obj.pno) obj.pno = 1;
  if (!obj.count) obj.count = 2;
  //计算开始的值
  let start = (obj.pno - 1) * obj.count;
  //将每页数据量转为整型
  let size = parseInt(obj.count);
  //执行SQL命令
  pool.query('select phone from tm_user', (err, result) => {
    if (err) {
      next(err);
      return;
    }
    res.send({
      code: 200,
      msg: '查询成功',
      data: result
    });
  })
})
// 7.按用户id查询用户信息
r.get('/uid', (req, res, next) => {
  //4.1获取查询字符串的数据
  let obj = req.query;
  //4.2判断是否为空，如果为空设置默认值
  if (!obj.pno) obj.pno = 1;//默认第一页
  if (!obj.count) obj.count = 2;
  //计算开始的值
  let start = (obj.pno - 1) * obj.count;
  //将每页的数据量转为整型
  let size = parseInt(obj.count);
  //4.3执行SQL命令
  pool.query('select * from tm_user where uid=?', [obj.uid], (err, result) => {
    console.log(err);
    if (err) {
      next(err);
      return;
    }
    res.send({
      code: 200,
      msg: '查询成功',
      data: result
    });
  });
});
//3.修改用户是否是vip
r.put('/vip', (req, res, next) => {
  // if(!req.session.auth){
  //   res.send({code:0,msg:'未登录'});
  //   return;
  // }
  //3.1获取传递的数据
  let obj = req.body;
  console.log(obj);
  //3.6执行SQL命令
  pool.query('update tm_user set isvip=1 where uid=?', [obj.uid], (err, result) => {
    if (err) {
      next(err);
      return;
    }
    if (result.affectedRows === 0) {
      res.send({ code: 201, msg: '修改失败' });
    } else {
      res.send({ code: 200, msg: '修改成功' });
    }
  })
});
//导出路由器对象
module.exports = r;


